package com.xcm.service;

import com.alibaba.fastjson.JSONObject;
import com.xcm.exception.ServiceException;
import com.xcm.model.SysAuthority;
import com.xcm.model.vo.SysAuthorityTreeVo;
import com.xcm.page.PageInfo;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 权限业务
 *
 * @author 林强
 * @date 2018-04-12 11:15
 */
public interface SysAuthorityService extends BaseService<SysAuthority> {

    /**
     * 新增并返回
     *
     * @param sysAuthority 新增的权限
     * @return
     */
    SysAuthority saveAndGetId(SysAuthority sysAuthority);

    /**
     * 查询集合
     *
     * @param paramMap 参数map
     * @return
     */
    List<SysAuthority> list(Map<String, Object> paramMap);

    /**
     * 判断是否存在
     *
     * @param sysAuthority 需要判断是否存在的权限
     * @return
     */
    String canSave(SysAuthority sysAuthority);

    /**
     * 判断是否能删除
     *
     * @param authorityId 需要删除的权限id
     * @return
     */
    boolean canDelete(Integer authorityId);

    /**
     * 分页查询
     *
     * @param paramMap 参数map
     * @param pageNum  第几页
     * @param pageSize 每页几条
     * @return
     */
    PageInfo listPage(Map<String, Object> paramMap, Integer pageNum, Integer pageSize);

    /**
     * 根据用户系统查询用户的所有权限
     *
     * @param userId 用户id
     * @return
     */
    JSONObject getAuthorityByUser(Integer userId);

    /**
     * 查询父类下所有子类
     *
     * @param sysAuthoritySet 存储查询出来对策子类（包括父亲）
     * @param pid             父ID
     */
    void findAllSysAuthorityByParent(Set<SysAuthority> sysAuthoritySet, Integer pid);

    /**
     * 根据id批量删除
     *
     * @param authorityIdArr 权限id(多个以英文逗号隔开)
     * @return 批量删除成功条数
     * @throws ServiceException
     */
    int batchDelete(String authorityIdArr) throws ServiceException;

    /**
     * 查询所有系统
     *
     * @return List<SysAuthority>
     */
    List<SysAuthority> listSystem();

    /**
     * 查询角色树状显示集合(已有的权限默认选中)
     *
     * @param roleId 角色id
     * @return List<SysAuthorityTreeVo>
     */
    List<SysAuthorityTreeVo> listTree(Integer roleId);
}